//package com.example.easyexcel.excelOld.config;
//
//import com.alibaba.excel.annotation.ExcelProperty;
//import com.alibaba.excel.context.AnalysisContext;
//import com.alibaba.excel.event.AnalysisEventListener;
//import com.example.easyexcel.excelOld.domain.ExcelError;
//import com.example.easyexcel.excelOld.domain.ExportVo;
//import com.example.easyexcel.excelOld.util.ExcelUtil;
//
//import javax.validation.constraints.NotNull;
//import java.lang.reflect.Field;
//import java.util.*;
//
//public class ExcelListener extends AnalysisEventListener<ExportVo> {
//    // 错误信息集合
//    private Map<Integer, List<ExcelError>> excelErrorMap = new HashMap<>();
//
//    // 导入信息集合
//    private List<ExportVo> dataList = new ArrayList<>();
//
//    public Map<Integer, List<ExcelError>> getExcelErrorMap() {
//        return excelErrorMap;
//    }
//
//    public ExcelListener() {
//        super();
//        dataList.clear();
//        excelErrorMap.clear();
//    }
//
//    public void setExcelErrorMaps(int rowsNum, int cellIndex, String msg) {
//        if (excelErrorMap.containsKey(rowsNum)) {
//            List<ExcelError> excelErrors = excelErrorMap.get(rowsNum);
//            excelErrors.add(new ExcelError(rowsNum, cellIndex, msg));
//            excelErrorMap.put(rowsNum, excelErrors);
//        } else {
//            List<ExcelError> excelErrors = new ArrayList<>();
//            excelErrors.add(new ExcelError(rowsNum, cellIndex, msg));
//            excelErrorMap.put(rowsNum, excelErrors);
//        }
//    }
//
//    public List<ExportVo> getDataList() {
//        return dataList;
//    }
//    @Override
//    public void invoke(ExportVo exportVo, AnalysisContext analysisContext) {
//        dataList.add(exportVo);
//    }
//
//    @Override
//    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
//        ExportVo exportVo = null;
//        for (int i = 0; i < dataList.size(); i++) {
//            exportVo = dataList.get(i);
//            //校验必填字段是否为空
//            valid(exportVo,i);
//            // 特殊字段检验
//            Integer passWordIndex = ExcelUtil.getCellIndex(exportVo, "passWord");
//            if (passWordIndex != null) {
//                if ("sms".equals(exportVo.getPassWord()) || "email".equals(exportVo.getPassWord()) || "wechat".equals(exportVo.getPassWord())) {
//                    setExcelErrorMaps(i, passWordIndex, "密码不能是 sms/email/wechat");
//                }
//            }
//        }
//    }
//
//
//    /**
//     * Excel导入字段非空校验校验
//     * @param object 校验的JavaBean 其属性须有自定义注解
//     */
//    public  void valid(Object object,Integer rowIndex) {
//        Field[] fields = object.getClass().getDeclaredFields();
//        for (Field field : fields) {
//            //设置可访问
//            field.setAccessible(true);
//            //属性的值
//            Object fieldValue = null;
//            try {
//                fieldValue = field.get(object);
//            } catch (IllegalAccessException e) {
//
//            }
//            //是否包含必填校验注解
//            boolean isExcelValid = field.isAnnotationPresent(NotNull.class);
//            if (isExcelValid && Objects.isNull(fieldValue)) {
//                int cellindex = field.getAnnotation(ExcelProperty.class).index();
//                setExcelErrorMaps(rowIndex, cellindex, field.getAnnotation(NotNull.class).message());
//            }
//
//        }
//    }
//}
